Computer systems use memory devices, such as dynamic random access memory (“DRAM”) devices, to store data that are accessed by a processor. These memory devices are normally used as system memory in a computer system. In a typical computer system, the processor communicates with the system memory through a processor bus and a memory controller. The processor issues a memory request, which includes a memory command, such as a read command, and an address designating the location from which data or instructions are to be read. The memory controller uses the command and address to generate appropriate command signals as well as row and column addresses, which are applied to the system memory. In response to the commands and addresses, data are transferred between the system memory and the processor. The memory controller is often part of a system controller, which also includes bus bridge circuitry for coupling the processor bus to an expansion bus, such as a PCI bus.
Although the operating speed of memory devices has continuously increased, this increase in operating speed has not kept pace with increases in the operating speed of processors. Even slower has been the increase in operating speed of memory controllers coupling processors to memory devices. The relatively slow speed of memory controllers and memory devices limits the data bandwidth between the processor and the memory devices.
In addition to the limited bandwidth between processors and system memory devices, the performance of computer systems is also limited by latency problems that increase the time required to read data from system memory devices. More specifically, when a memory device read command is coupled to a system memory device, such as a synchronous DRAM (“SDRAM”) device, the read data are output from the SDRAM device only after a delay of several clock periods. Therefore, although SDRAM devices can synchronously output burst data at a high data rate, the delay in initially providing the data can significantly slow the operating speed of a computer system using such SDRAM devices as system memory.
Memory read latency may also be adversely impacted by the need to write data to memory devices. More specifically, if a controller issues a write request followed by a read request, it may not be possible for a memory device to which the requests are issued to respond to the read request until after the write request has been serviced. The memory read latency will therefore be increased by the time required to service the write request. Therefore, write requests can considerably increase memory read latencies.
One approach to limiting the degree to which write requests can increase memory read latency is to use posted write buffers to store write requests while a read request is being serviced. In a computer system having a posted write buffer, the processor or other memory access device can issue a write request even if the memory device to which the write request is directed is busy servicing a prior write or read request. Using this approach, memory requests can be serviced out of order since an earlier write request can be stored in the posted write buffer while a subsequent read request is being serviced. The ability to buffer write requests to allow a read request to be serviced can greatly reduce memory read latency since read requests can be given first priority regardless of their chronological order.
The use of a posted write buffer can provide advantages in addition to reducing memory read latency. For example, a series of write requests interspersed with read requests can be stored in the posted write buffer to allow the read requests to be serviced in a pipelined manner followed by servicing the stored write requests in a pipelined manner. Accumulating write requests in this manner also tends to avoid placing alternating write and read requests on a memory bus, which can require that lengthy settling times be provided between coupling the write request to the memory device and subsequently coupling the read request to the memory device.
Although the use of posted write buffers provides significant advantages in conventional computer systems, it is likely to be less advantageous in a computer system having a memory system using a hub architecture. In a conventional computer system, the posted write buffer is normally a part of the system controller or the processor. A posted write buffer in the processor or controller can adequately handle the write requests that a processor issues to several memory devices. In a hub architecture, a processor is coupled to several memory modules through a system controller or similar device. Each of the memory modules includes a memory hub coupled to the controller and to several memory devices that are also part of the memory module. A posted write buffer located in the controller is likely to be inadequate in handling the vastly higher rate of write requests that would be directed to several memory modules each of which includes a memory hub coupled to several memory devices. Not only is the bandwidth that the posted write buffer would be required to handle vastly greater with a hub architecture, but the difficulty in ensuring write buffer coherency is also vaster greater. More specifically, the posted write buffer must be able to handle a “read around write” situation in which a read request to a memory address is processed prior to an earlier occurring write request to the same memory address. Otherwise, the read request will return the wrong data because the write request, which would have stored the correct data at that memory address, has not yet been serviced. The large amount of write requests that would need to be buffered with a hub architecture in a system having a large number of memory addresses would make it very difficult to ensure coherency in conventional posted write buffers.
There is therefore a need for an architecture that provides the advantages of a posted write buffer in a computer system or other electronic system using a memory hub architecture, thereby providing a memory system having a high bandwidth and low latency.